/*
 * 
 * 
 * 
 */
package com.hboxs.asl.service;

import com.hboxs.asl.Filter;
import com.hboxs.asl.Order;
import com.hboxs.asl.entity.Cart;
import com.hboxs.asl.entity.Merchant;
import com.hboxs.asl.entity.Product;
import com.hboxs.asl.entity.Promotion;

import java.util.List;
import java.util.Set;

/**
 * Service - 促销
 */
public interface PromotionService extends BaseService<Promotion, Long> {

    /**
     * 查找促销
     *
     * @param hasBegun 是否已开始
     * @param hasEnded 是否已结束
     * @param count    数量
     * @param filters  筛选
     * @param orders   排序
     * @return 促销
     */
    List<Promotion> findList(Boolean hasBegun, Boolean hasEnded, Integer count, List<Filter> filters, List<Order> orders);

    /**
     * 查找促销(缓存)
     *
     * @param hasBegun    是否已开始
     * @param hasEnded    是否已结束
     * @param count       数量
     * @param filters     筛选
     * @param orders      排序
     * @param cacheRegion 缓存区域
     * @return 促销(缓存)
     */
    List<Promotion> findList(Boolean hasBegun, Boolean hasEnded, Integer count, List<Filter> filters, List<Order> orders, String cacheRegion);

    /**
     * 找到正在进行的促销活动
     * @param type 促销类型
     * @return
     */
    Promotion findUsingOne(Promotion.Type type);


    /**
     * 找到正在进行的促销活动
     * @param merchant 商家
     * @param type 促销类型
     * @return
     */
    Promotion findUsingOne(Merchant merchant ,Promotion.Type type);


    /**
     * 找到正在进行的所有促销活动
     * @return
     */
    List<Promotion> findUsingList();

    /**
     * 找到商家正在进行的所有促销活动
     * @return
     */
    List<Promotion> findUsingList(Merchant merchant);

    /**
     * 找到购物车内没有促销
     * @param cart
     * @return
     */
    List<Promotion> findListNotInCart(Cart cart);

    /**
     *
     * @param promotion
     * @param cart
     * @return
     */
    Set<Product> findProductByPromotion(Promotion promotion, Cart cart);


}